package com.workman.permission.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * 验证码生成器
 * @author dsna
 *
 */
public class ValidateCode {
	//字体字符串
	private static String STRING_BYTE="0,1,0,0,0,12,0,-128,0,3,0,64,79,83,47,50,69,6,-71,12,0,0,1,72,0,0,0,96,99,109,97,112,21,20,56,92,0,0,3,-96,0,0,2,108,103,97,115,112,-1,-1,0,3,0,0,65,-100,0,0,0,8,103,108,121,102,108,-6,-83,-100,0,0,7,12,0,0,53,-36,104,101,97,100,-9,-21,-91,122,0,0,0,-52,0,0,0,54,104,104,101,97,12,-59,5,90,0,0,1,4,0,0,0,36,104,109,116,120,-57,-112,34,-119,0,0,1,-88,0,0,1,-8,107,101,114,110,-1,-5,-1,-75,0,0,60,-24,0,0,0,30,108,111,99,97,34,-61,49,124,0,0,6,12,0,0,1,0,109,97,120,112,0,-123,0,-113,0,0,1,40,0,0,0,32,110,97,109,101,-66,65,96,-65,0,0,61,8,0,0,3,89,112,111,115,116,-70,94,37,-94,0,0,64,100,0,0,1,56,0,1,0,0,0,1,0,0,116,92,42,-62,95,15,60,-11,0,11,8,0,0,0,0,0,-55,-51,-38,-119,0,0,0,0,-55,-49,-127,-110,-1,10,-2,19,6,38,6,81,0,0,0,6,0,1,0,0,0,0,0,0,0,1,0,0,6,-76,-2,94,0,-34,6,-118,-1,10,-1,-12,6,38,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,0,1,0,0,0,127,0,-113,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,-82,1,-112,0,5,0,8,5,-102,5,51,0,0,1,27,5,-102,5,51,0,0,3,-47,0,102,2,18,0,0,2,0,5,0,0,0,0,0,0,0,-128,0,0,-89,80,0,0,74,0,0,0,0,0,0,0,0,72,76,32,32,0,64,0,32,34,25,5,-102,-2,102,0,-51,6,-76,1,-94,32,0,1,17,65,0,0,0,4,0,5,-102,0,0,0,32,0,0,4,0,0,100,0,0,0,0,1,-4,0,0,1,-4,0,0,1,-11,0,119,2,-96,0,121,4,-70,0,58,3,107,0,112,4,118,0,59,3,-110,0,56,1,90,0,101,2,-108,0,-94,2,-108,0,74,4,0,0,-111,3,-10,0,111,1,-8,0,91,2,-16,0,53,2,45,0,-94,2,-59,0,16,3,-55,0,38,2,87,0,-105,4,14,0,43,3,62,0,36,3,-25,0,30,3,-61,0,40,3,-126,0,31,3,117,0,21,3,88,0,25,3,-10,0,82,1,-63,0,-121,2,45,0,114,3,114,0,82,3,-10,0,-122,3,114,0,82,2,-20,0,-100,5,29,0,88,4,-61,0,19,3,-31,0,8,4,-105,0,42,4,26,0,33,4,-65,0,34,4,40,0,22,5,67,0,34,3,-11,0,31,4,13,0,38,4,-88,0,15,4,-27,0,40,3,-1,0,31,5,-36,0,25,5,64,0,38,4,70,0,49,4,104,0,29,5,33,0,31,4,117,0,32,4,50,0,25,4,124,0,29,4,56,0,20,4,77,0,34,5,-128,0,16,5,17,0,33,4,-34,0,28,4,-102,0,21,2,70,0,46,2,116,0,16,2,70,0,46,2,-59,0,36,3,-42,0,33,1,-109,0,55,3,-22,0,30,3,42,0,46,3,97,0,43,3,-9,0,43,3,84,0,28,2,-62,0,35,2,-91,-1,109,3,-25,0,27,2,-20,0,40,2,118,-1,10,3,117,0,52,2,77,0,32,5,-95,0,11,4,30,0,22,3,110,0,24,2,-16,0,31,3,65,0,37,3,88,0,31,3,3,0,35,3,-29,0,34,3,-12,0,29,3,-110,0,21,4,-60,0,30,3,-14,0,55,3,36,-1,-115,3,-113,0,32,2,-33,0,-80,2,-59,1,0,2,-33,0,42,4,63,0,47,2,-96,0,-82,3,-90,0,73,3,-10,0,76,3,-10,0,122,4,-18,0,8,3,-10,1,-85,3,-10,0,-86,4,0,0,-47,6,-118,0,100,2,-120,0,-125,3,-80,0,-82,3,-10,0,87,6,-118,0,100,4,1,0,55,2,-94,0,60,3,-10,0,111,3,-22,0,-21,3,62,0,-31,4,0,1,60,4,-100,0,0,4,0,0,93,1,-4,0,-127,4,0,1,104,3,-10,1,93,2,-50,0,-118,3,-80,0,101,4,118,0,110,0,110,0,110,0,0,0,2,0,1,0,0,0,0,0,20,0,3,0,1,0,0,2,24,0,6,2,4,0,0,0,0,0,-3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,99,0,100,0,104,0,0,0,118,0,0,0,110,0,106,0,0,0,116,0,105,0,0,0,0,0,0,0,0,0,113,0,0,0,0,0,102,0,117,0,0,0,0,0,0,0,0,0,0,0,107,0,122,0,0,0,0,0,0,0,0,0,98,0,109,0,0,0,0,0,0,0,0,0,108,0,123,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,0,0,0,0,0,0,0,120,0,4,0,84,0,0,0,16,0,16,0,3,0,0,0,126,0,-96,0,-84,0,-83,0,-66,3,126,34,25,-1,-1,0,0,0,32,0,-96,0,-95,0,-83,0,-82,3,126,34,25,-1,-1,-1,-29,0,0,-1,-63,0,0,-1,-64,-4,-96,-34,94,0,1,0,0,0,14,0,0,0,12,0,0,0,0,0,0,0,0,0,3,0,16,0,0,0,86,0,86,0,86,0,86,0,122,0,-92,1,6,1,84,1,-94,1,-16,2,8,2,40,2,72,2,-128,2,-72,2,-46,2,-22,2,-2,3,26,3,84,3,110,3,-98,3,-42,4,26,4,90,4,-120,4,-80,4,-8,5,54,5,86,5,-128,5,-94,5,-52,5,-18,6,30,6,-120,6,-62,7,10,7,54,7,106,7,-96,7,-38,8,28,8,88,8,-116,8,-62,8,-2,9,44,9,106,9,-96,9,-50,10,4,10,78,10,-94,10,-34,11,14,11,68,11,112,11,-86,11,-28,12,16,12,66,12,116,12,-114,12,-64,12,-34,12,-10,13,16,13,74,13,-126,13,-88,13,-22,14,30,14,96,14,-98,14,-36,15,22,15,92,15,-114,15,-80,15,-2,16,60,16,106,16,-98,16,-42,17,6,17,62,17,126,17,-70,17,-32,18,24,18,84,18,-104,18,-58,19,4,19,32,19,94,19,-118,19,-82,19,-4,20,66,20,-74,21,120,21,-116,22,6,22,68,22,-52,23,2,23,36,23,54,23,-48,23,-24,24,14,24,86,24,-120,24,-66,24,-42,24,-42,24,-14,25,20,25,60,25,86,25,-120,25,-86,26,18,26,106,26,-18,0,4,0,100,0,0,3,-100,5,-102,0,3,0,7,0,36,0,56,0,0,51,17,33,17,37,33,17,33,23,54,55,54,51,50,22,21,20,6,7,14,1,21,20,23,35,38,53,52,18,53,52,38,35,34,7,6,7,19,55,54,51,50,31,1,22,21,20,15,1,6,35,34,47,1,38,53,52,100,3,56,-4,-6,2,-44,-3,44,-81,31,27,53,59,92,112,46,64,63,72,24,32,35,-93,66,58,38,31,26,30,64,57,11,9,10,12,56,9,10,56,14,7,11,9,61,7,5,-102,-6,102,50,5,54,-20,28,15,30,95,80,49,99,80,80,104,47,38,95,97,51,76,1,28,75,57,66,17,15,25,-4,-1,58,10,11,60,11,9,11,11,62,14,10,71,9,9,10,0,2,0,119,0,28,1,125,4,-50,0,10,0,20,0,0,1,23,21,2,21,34,21,34,53,18,51,3,51,22,21,6,43,1,34,39,52,1,112,13,110,14,110,116,49,110,69,55,19,36,97,21,34,4,-50,28,83,-3,108,100,14,56,3,47,-4,15,27,56,96,55,72,0,0,2,0,121,4,16,2,52,5,-40,0,12,0,25,0,0,19,22,29,1,20,7,23,34,21,38,61,1,54,37,22,23,21,6,21,20,23,35,34,39,53,54,-11,69,82,69,14,-90,19,1,99,63,6,69,69,13,-108,32,91,5,-40,17,24,14,54,84,-7,14,68,-89,125,44,33,27,28,28,71,53,23,-72,-35,83,110,0,0,2,0,58,0,58,4,110,5,9,0,62,0,72,0,0,1,22,23,6,21,51,50,61,1,54,59,1,50,23,6,29,1,22,29,1,6,21,51,23,20,35,34,17,20,35,38,53,18,53,35,32,21,6,7,35,34,61,1,54,53,7,39,53,52,37,54,53,34,7,38,35,53,52,55,51,50,53,52,19,51,50,53,54,53,34,39,35,6,2,84,65,6,29,15,-72,4,24,57,24,18,14,113,-100,-57,28,85,-1,113,57,85,14,-2,-13,19,52,56,29,57,-29,42,1,41,85,17,124,126,44,56,71,-29,42,71,-72,14,38,4,-128,99,5,9,27,29,121,35,43,127,28,71,24,32,14,26,31,57,113,-72,14,127,-2,-28,-87,21,21,1,48,50,-1,-59,15,28,43,-6,47,14,56,14,54,46,109,-26,14,28,43,22,35,56,-58,-3,117,-128,14,99,71,51,0,0,3,0,112,-1,-28,3,9,5,-83,0,38,0,45,0,52,0,0,1,51,50,19,50,29,1,20,7,6,21,4,21,20,5,7,22,21,20,35,34,39,55,34,39,53,52,55,22,59,1,17,38,61,1,52,37,53,39,3,20,51,52,55,35,6,1,20,7,51,50,53,52,1,-89,15,74,25,113,127,15,1,13,-2,-41,28,28,99,42,15,15,-97,54,43,63,121,14,-1,1,41,42,-128,-100,14,70,100,1,28,29,14,-128,5,-83,-2,-13,42,29,36,20,-63,76,-119,-81,-110,80,43,111,39,85,114,-92,-16,85,21,22,-29,1,56,34,-78,28,-104,89,28,-58,-2,3,57,35,-78,70,-2,-99,35,-50,113,65,0,0,5,0,59,0,-88,4,54,4,-22,0,11,0,22,0,28,0,41,0,49,0,0,1,23,20,1,20,7,35,34,53,52,1,18,5,22,29,1,20,7,35,34,39,53,52,23,21,20,23,50,55,1,22,29,1,20,5,35,34,39,53,52,55,54,3,51,54,53,38,53,35,34,3,27,29,-2,16,71,71,28,1,-101,-125,-2,126,-115,-58,42,117,39,127,43,60,25,2,82,-86,-2,-41,113,76,23,-58,23,80,14,-29,14,43,105,4,-22,42,-107,-4,-4,44,41,29,50,2,117,1,84,99,17,40,42,-123,-120,-86,28,-86,127,85,21,22,-128,-2,115,23,118,15,-110,-91,57,28,112,-14,17,-2,-73,50,-107,27,15,0,3,0,56,0,79,3,81,5,73,0,29,0,38,0,46,0,0,1,51,50,23,21,20,1,6,21,22,23,54,19,55,22,21,20,7,50,21,6,35,39,4,35,38,53,18,19,0,3,21,51,0,55,35,34,3,6,3,6,21,22,51,50,53,38,2,-89,57,104,9,-2,-84,-72,18,95,33,-119,43,28,113,113,18,25,84,-2,-17,96,127,113,57,1,2,-69,14,1,98,56,14,-81,-49,28,99,15,15,56,71,53,5,73,42,100,63,-2,-119,-34,76,56,29,33,1,9,28,4,24,90,-34,56,71,14,-72,44,97,1,95,1,101,1,-87,-3,117,14,1,-70,110,-2,-112,-113,-2,-97,78,35,57,99,18,0,0,0,1,0,101,4,84,1,7,6,41,0,12,0,0,19,35,3,38,53,52,54,51,50,22,21,20,7,-59,30,62,4,41,39,39,43,4,4,84,1,103,23,10,37,40,39,37,8,26,0,1,0,-94,0,25,2,64,4,38,0,16,0,0,1,22,29,1,20,7,6,29,1,20,31,1,7,34,3,53,18,1,-18,82,-118,-118,-49,14,27,-112,-68,109,4,38,9,33,28,18,92,-87,-80,111,-52,114,69,14,1,-97,41,2,69,0,0,0,0,1,0,74,0,25,1,-24,4,38,0,16,0,0,0,19,21,2,35,39,55,54,61,1,52,39,38,61,1,52,55,1,123,109,-68,-113,28,14,-49,-118,-118,83,4,38,-3,-69,41,-2,97,14,69,114,-52,111,-80,-87,92,18,28,33,9,0,0,0,0,1,0,-111,2,-28,2,-66,5,19,0,37,0,0,1,22,21,7,20,23,22,21,6,35,38,39,35,7,6,43,1,34,39,53,52,55,38,53,55,50,23,51,53,52,55,51,22,29,1,51,54,51,2,-101,35,-128,116,12,16,66,49,90,11,116,21,26,11,17,18,-128,-12,23,65,121,11,35,35,46,12,112,50,5,19,9,49,-25,61,122,17,21,49,22,-95,-83,10,29,20,39,-83,118,103,10,87,68,71,6,16,52,77,-102,0,0,0,1,0,111,0,-12,3,48,4,76,0,36,0,0,1,22,29,1,20,51,50,55,22,23,21,20,7,6,7,22,29,1,20,7,35,34,39,54,17,38,35,6,35,39,53,54,51,22,51,39,54,2,55,28,96,31,24,64,6,-76,36,19,14,56,27,72,11,41,88,22,-93,72,14,46,-109,-84,8,14,51,4,76,4,24,96,125,14,27,28,42,41,14,33,-27,24,32,41,75,35,41,-111,1,13,28,14,28,27,83,13,-35,41,0,0,0,1,0,91,-2,-14,1,-108,0,-69,0,13,0,0,55,51,22,29,1,2,39,53,54,55,52,47,1,52,-110,14,-12,115,-72,-125,16,-109,14,-69,3,124,28,-2,-46,10,14,109,114,60,26,27,75,0,0,1,0,53,1,-33,2,-79,2,-128,0,9,0,0,1,23,6,37,39,38,39,54,23,22,2,-98,19,3,-3,-28,13,72,8,8,-8,-57,2,125,126,32,3,1,5,42,110,18,15,0,0,1,0,-94,0,16,1,86,0,-60,0,8,0,0,37,22,21,6,43,1,34,39,54,1,17,69,36,75,28,27,14,28,-60,36,75,69,97,83,0,0,0,1,0,16,-1,106,2,-107,5,123,0,11,0,0,1,22,29,1,20,1,2,3,34,39,53,0,2,96,53,-2,-7,-90,-125,55,30,1,-78,5,123,37,77,14,31,-3,-89,-2,17,-2,-42,71,14,4,-83,0,0,0,0,1,0,38,0,6,3,-86,5,-116,0,33,0,0,1,51,50,19,21,16,1,6,43,1,36,17,53,16,19,51,50,23,20,3,6,21,16,59,1,32,19,53,2,39,5,38,53,54,3,9,48,43,70,-2,46,53,44,80,-2,-1,-47,64,25,39,-112,16,112,65,1,9,120,16,64,-2,-114,16,-97,5,-116,-2,-65,-79,-3,-98,-2,-18,32,53,1,125,16,1,52,1,63,64,45,-2,-85,87,58,-2,-33,2,-109,96,1,25,25,113,31,17,-31,0,0,0,0,1,0,-105,0,6,1,-11,5,-106,0,11,0,0,1,22,21,23,6,3,6,35,34,39,18,19,1,-61,37,13,90,48,52,29,101,30,75,112,5,-106,6,31,117,127,-4,6,125,75,1,117,3,-48,0,1,0,43,0,112,3,-45,5,23,0,28,0,0,1,4,21,22,21,20,3,51,50,55,22,6,7,5,38,39,52,37,54,19,53,52,39,6,43,1,38,53,52,1,45,1,-60,26,-49,39,-126,-80,62,76,-22,-2,15,95,34,1,2,-100,-89,116,89,53,-127,104,5,23,61,78,84,-123,-102,-2,125,31,36,103,76,110,12,34,-76,37,69,1,-24,62,39,38,16,8,116,88,0,1,0,36,0,40,3,18,5,120,0,35,0,0,19,51,32,23,21,20,7,4,29,1,20,5,6,35,38,53,52,51,22,51,0,53,52,39,35,34,7,38,53,37,54,53,38,47,1,54,119,117,1,65,45,83,1,11,-2,-127,69,31,-122,67,54,29,1,77,33,116,-120,-8,83,1,11,-123,-107,-55,17,11,5,120,-32,17,88,-103,23,-90,-32,-71,-11,35,21,48,103,34,1,19,-101,26,-127,103,24,96,-101,-126,111,65,21,35,103,0,0,1,0,30,-1,-8,3,-61,5,119,0,46,0,0,1,22,29,1,20,3,51,54,53,16,51,22,21,20,7,22,51,54,51,23,20,7,35,6,29,1,20,23,20,7,35,34,39,18,61,1,35,34,5,35,34,61,1,52,19,54,19,1,-75,102,-35,17,-86,-104,34,34,17,17,-44,26,34,51,-52,68,17,101,34,27,41,51,34,83,-2,-34,34,34,-2,68,34,5,119,11,40,68,-78,-2,46,17,34,1,66,5,29,68,-104,51,17,51,88,14,23,-127,68,61,92,-112,59,68,1,42,125,17,84,34,17,37,1,113,-71,1,51,0,0,1,0,40,0,15,3,-97,5,85,0,39,0,0,1,51,22,21,6,5,21,7,54,51,50,19,16,5,6,35,38,53,55,23,50,19,53,52,39,35,34,3,35,38,53,18,53,2,53,55,51,22,21,36,3,66,56,37,125,-2,50,19,-47,54,-37,43,-3,-50,33,42,-87,37,-87,-53,-28,75,-125,-123,-89,19,112,-106,56,37,75,56,1,-109,5,85,6,32,95,-89,75,-125,56,-2,-25,-2,124,-44,19,45,-113,19,57,1,-81,57,29,46,-2,-63,37,57,1,40,-65,1,14,67,19,19,93,-125,0,0,0,1,0,31,0,2,3,91,5,-83,0,23,0,0,1,50,7,0,3,22,59,1,50,19,52,37,39,53,55,4,17,2,33,36,53,18,1,54,1,-15,40,68,-1,0,20,28,98,36,-16,120,-2,-32,18,90,1,104,120,-2,-128,-2,-68,27,1,10,78,5,-83,-22,-3,-128,-2,-69,108,1,123,117,-103,36,36,18,84,-2,-2,-3,-29,23,-45,1,41,3,8,121,0,1,0,21,-1,120,3,63,5,-105,0,22,0,0,19,5,36,51,23,21,20,3,2,17,21,35,34,39,53,18,19,7,35,34,39,53,52,93,1,68,1,62,78,18,-40,108,36,62,28,49,-78,29,-4,-29,79,5,-105,54,36,36,72,52,-2,6,-2,-91,-2,-118,-94,-58,108,2,53,1,-12,2,108,36,27,0,0,3,0,25,0,12,3,49,5,-117,0,27,0,36,0,47,0,0,1,51,22,29,1,20,3,18,29,1,20,7,20,43,1,36,53,52,55,34,61,1,54,37,53,2,53,16,23,21,22,21,54,53,52,35,6,19,6,29,1,20,23,51,36,61,1,38,2,35,54,-40,-4,-76,-40,90,72,-2,-68,90,108,15,1,35,126,-94,72,-4,-94,-94,90,-22,54,36,1,14,59,5,-117,47,-114,34,-54,-2,-74,-2,-31,73,69,-93,25,35,22,47,-108,126,52,34,44,-77,35,1,45,59,1,40,-28,120,-61,28,-40,-94,-119,59,-3,38,-76,112,34,25,27,23,63,86,-50,0,0,2,0,82,-1,-36,2,-14,5,-115,0,24,0,37,0,0,1,50,23,54,59,1,50,23,2,29,1,6,7,38,39,53,16,55,6,43,1,38,17,16,55,3,6,23,22,23,54,19,35,34,39,38,35,34,1,95,-67,31,74,48,25,24,12,-73,13,58,54,10,49,97,49,49,-48,-48,74,16,9,4,89,-22,23,12,54,118,49,36,49,5,-115,-24,73,85,-3,10,-60,61,-105,47,10,54,85,1,1,-24,73,-114,1,-128,1,54,56,-2,-13,112,92,120,-91,74,1,110,-121,24,0,0,0,2,0,-121,0,38,1,100,2,-94,0,8,0,16,0,0,19,51,22,29,1,6,35,38,53,19,51,50,23,7,38,39,54,-80,42,83,55,56,55,97,55,41,28,83,92,18,23,2,-94,9,33,27,83,74,50,-2,98,-104,42,38,45,77,0,0,0,2,0,114,-2,-1,1,-80,2,38,0,10,0,25,0,0,1,51,22,29,1,20,43,1,34,39,52,19,51,22,29,1,6,7,35,53,54,39,38,39,53,54,1,38,27,55,27,-104,72,11,111,82,125,29,-32,14,-77,23,122,2,4,2,38,22,74,28,28,42,64,-2,-57,66,-115,14,-98,69,14,-124,122,74,23,55,28,0,0,1,0,82,1,-91,2,-6,4,-122,0,17,0,0,1,51,50,21,20,1,7,4,29,1,20,35,38,37,39,54,1,50,2,-106,29,42,-2,-84,84,1,-59,29,-63,-2,68,14,18,1,-20,24,4,-122,57,30,-2,-11,114,103,24,113,29,85,85,29,-118,1,101,0,0,2,0,-122,1,-30,3,94,3,-63,0,9,0,19,0,0,1,23,6,37,39,38,39,54,5,22,19,23,6,37,39,38,39,54,5,22,3,79,15,30,-3,-74,15,78,9,9,1,13,-40,-58,16,31,-3,-74,15,77,9,9,1,13,-40,2,115,113,32,3,1,5,42,110,18,15,1,79,113,32,2,1,6,42,110,18,15,0,0,1,0,82,1,-91,2,-6,4,-122,0,17,0,0,18,51,0,23,7,4,7,34,61,1,52,37,39,0,53,52,59,1,-28,24,1,-21,19,15,-2,68,-63,28,1,-59,85,-2,-84,43,28,4,91,-2,-101,-118,29,85,85,29,113,24,103,114,1,11,30,57,0,0,0,2,0,-100,0,34,2,97,5,-128,0,22,0,30,0,0,19,32,23,21,20,5,21,20,23,6,35,34,17,38,39,54,55,51,52,35,38,61,1,19,50,21,6,35,34,39,52,-86,1,74,109,-2,-13,71,46,39,99,38,5,-114,-58,14,-72,-58,-72,127,59,82,43,42,5,-128,-100,-72,-94,65,42,-122,-36,-128,1,98,61,-90,42,-128,-86,28,57,56,-5,119,-115,43,85,99,0,3,0,88,0,89,4,-73,5,94,0,39,0,61,0,70,0,0,1,51,32,19,21,16,5,35,34,39,35,6,35,34,3,52,55,38,53,6,21,16,5,22,23,50,55,51,21,6,43,1,32,3,38,61,1,16,1,54,3,54,51,23,54,51,22,21,6,21,20,59,1,50,55,54,53,2,33,35,34,7,19,20,23,50,19,38,43,1,34,2,112,83,1,89,-101,-2,-66,47,-125,36,35,71,-112,-112,34,24,12,72,1,77,87,80,101,-59,47,-115,-112,84,-2,106,-115,24,1,101,107,-18,-97,43,-113,63,56,24,47,95,12,92,110,36,60,-2,-101,47,-63,-127,24,59,-107,113,61,58,59,-113,5,94,-2,72,60,-2,-69,-93,-65,-29,1,113,62,105,23,13,58,-76,-2,-117,103,33,15,119,36,-102,1,-108,-107,101,12,1,12,1,59,36,-2,-101,59,11,11,47,36,-42,107,-89,-54,58,97,1,-95,-6,-2,-54,114,-109,1,-24,35,0,0,1,0,19,-1,-86,4,-119,6,81,0,36,0,0,1,32,19,22,29,1,20,43,1,34,53,52,55,53,52,39,7,35,2,43,1,39,18,19,18,51,50,23,2,21,55,51,55,52,1,53,52,2,-43,1,46,93,41,41,42,-28,103,62,-49,-27,-71,-47,21,21,125,-7,-101,52,41,43,-110,-110,-70,42,-2,-14,6,81,-5,-56,-35,69,84,41,62,57,6,103,-103,-35,21,-4,-21,42,1,43,3,33,1,77,125,-2,-84,96,21,21,-1,1,-103,21,52,0,0,3,0,8,-1,-11,3,-88,5,-5,0,16,0,25,0,35,0,0,1,4,3,6,7,22,23,7,2,5,39,38,27,1,54,23,54,7,3,23,36,63,1,38,37,6,3,7,6,3,23,4,19,54,39,4,1,-66,1,-94,26,8,89,-126,65,9,30,-3,101,57,-91,60,36,18,-123,68,47,30,16,1,-106,14,3,48,-2,-64,38,38,6,9,1,19,1,17,-17,11,-123,-2,-65,5,-15,33,-2,-86,96,-92,49,-117,114,-2,-124,-41,5,89,2,-8,1,-56,-28,10,14,-30,-2,-124,40,50,-71,38,-99,25,3,-3,50,76,123,-2,-2,2,21,1,-53,-123,10,60,0,0,0,1,0,42,0,22,4,98,5,-69,0,26,0,0,1,50,23,21,20,7,35,39,4,17,21,16,33,51,50,55,22,29,1,20,5,35,32,17,53,16,37,2,-78,-123,11,54,72,54,-2,80,1,68,-40,119,-51,36,-2,-122,18,-3,84,2,10,5,-69,52,36,91,15,36,-94,-2,-58,-115,-2,36,88,6,29,89,123,35,2,-116,35,2,-105,95,0,1,0,33,0,1,3,-49,5,-29,0,30,0,0,19,51,50,5,0,29,1,16,5,6,15,1,38,53,17,2,53,54,55,51,22,17,22,51,50,19,53,16,37,38,53,-81,36,-63,1,49,1,10,-2,15,-112,70,89,89,53,34,37,18,-114,45,97,-1,83,-2,50,-114,5,-29,-85,-2,-4,-58,-104,-2,126,-70,14,120,19,119,-12,2,59,1,11,38,87,9,10,-4,100,115,1,-73,57,1,-112,-84,24,109,0,1,0,34,0,5,4,-108,5,-91,0,32,0,0,1,50,23,21,20,5,6,29,1,51,37,50,21,20,5,23,17,50,37,22,21,4,33,34,3,18,53,7,38,61,1,52,37,3,120,27,44,-2,14,18,18,2,75,124,-3,39,18,-118,1,-10,53,-2,57,-2,114,36,18,18,-114,89,2,-57,5,-91,72,36,40,50,-45,95,-112,72,126,65,61,90,-2,-86,90,101,43,126,1,50,2,-94,-30,36,23,31,72,79,65,0,0,2,0,22,-1,-46,3,-11,5,-54,0,12,0,37,0,0,1,51,22,29,1,20,7,34,5,35,34,39,52,23,51,22,29,1,20,23,37,23,21,20,5,21,20,19,6,43,1,34,53,17,52,39,53,52,3,112,95,38,57,-41,-3,-54,96,27,30,-27,95,38,57,1,-54,19,-2,16,19,28,29,76,57,76,5,-54,5,32,93,27,29,93,56,110,-15,6,31,-126,-118,12,94,38,93,51,98,112,-84,-2,-56,75,-51,2,-116,68,82,37,100,0,0,0,0,1,0,34,-1,-46,5,29,5,-38,0,41,0,0,1,23,21,20,1,2,21,22,51,36,17,6,35,39,53,52,37,22,29,1,20,43,1,2,21,17,20,43,1,34,39,54,53,35,4,35,36,17,53,16,1,54,2,-115,37,-2,-44,-50,38,-88,1,-62,-41,-115,19,3,1,75,37,-87,113,37,75,48,27,19,19,-2,-67,-91,-2,-25,1,-24,113,5,-38,57,57,80,-2,-7,-2,35,-104,115,118,1,84,95,38,76,76,-65,29,28,77,38,-2,-100,-98,-2,-107,38,-65,100,91,-27,29,1,1,19,1,-97,2,64,95,0,0,1,0,31,-1,-8,3,-59,5,-49,0,37,0,0,1,51,22,29,1,20,3,21,20,7,38,61,1,52,19,53,35,4,21,20,3,35,38,39,18,19,2,53,52,55,50,23,21,51,50,37,17,54,3,64,95,38,95,76,96,57,57,-2,93,95,58,57,38,76,57,57,77,108,25,19,55,1,-109,5,5,-49,5,31,18,-85,-4,96,-76,-118,24,25,101,18,113,2,42,72,55,-77,-46,-2,109,14,112,1,7,2,90,1,24,62,45,9,-58,-4,90,1,-116,36,0,0,0,1,0,38,-1,-29,3,-21,5,-99,0,31,0,0,1,23,21,6,17,2,21,22,21,54,55,51,50,23,21,20,5,6,7,35,6,39,53,52,37,18,53,35,4,35,39,52,3,12,19,-15,19,19,-11,107,38,26,29,-2,122,112,-53,112,-120,12,1,97,55,18,-2,-69,9,56,5,-99,36,54,-115,-3,-17,-2,-17,107,35,19,43,65,54,18,-113,74,47,20,24,55,54,65,62,3,90,119,36,72,109,0,0,1,0,15,0,10,4,124,6,2,0,32,0,0,1,22,29,1,20,7,6,17,18,19,20,33,35,32,39,54,51,4,59,1,50,19,16,43,1,34,5,35,34,39,52,37,54,4,52,72,-76,72,18,36,-2,-14,90,-2,44,107,35,19,1,-93,-82,18,90,18,108,18,22,-2,-45,54,45,9,2,45,-124,6,2,28,27,18,39,70,-82,-2,104,-2,-59,-2,-47,-110,-74,18,54,2,51,2,52,91,73,115,67,72,0,0,0,2,0,40,-1,-29,4,-71,5,-5,0,17,0,33,0,0,1,23,21,20,1,0,21,34,21,38,1,38,53,0,53,54,55,54,5,51,50,23,7,22,23,2,43,1,34,53,18,17,53,39,3,-41,18,-2,-64,2,16,19,-78,-2,-94,-30,1,83,76,19,99,-3,103,56,45,12,19,24,14,117,-71,56,38,-30,19,5,-5,37,127,-104,-2,66,-3,87,99,18,70,1,-20,-90,52,1,-112,35,-113,-73,19,37,-111,36,-54,52,-5,-46,37,2,17,2,10,-2,127,0,0,0,0,1,0,31,-1,-25,3,-36,5,-62,0,28,0,0,1,51,50,21,16,3,51,22,59,1,50,55,22,21,6,33,34,7,38,61,1,54,19,18,53,38,39,53,52,1,-113,92,55,-36,18,32,42,110,-127,-35,110,85,-3,-65,39,-37,37,-83,122,73,18,37,5,-62,-34,-2,-70,-3,58,19,56,44,86,111,37,61,50,37,106,2,30,1,-97,48,73,56,56,26,0,1,0,25,0,13,5,-77,5,-76,0,36,0,0,1,22,17,22,29,1,20,35,34,3,38,43,1,0,17,6,35,34,17,2,35,2,3,20,43,1,34,39,18,19,55,22,19,51,18,55,54,4,-121,-72,116,66,-46,24,50,33,17,-2,-27,54,47,116,75,59,-79,56,17,17,60,73,117,-23,34,-9,36,33,-91,102,111,5,-76,-2,-3,100,-18,-96,72,55,3,-83,-93,-3,-67,-2,96,109,2,85,1,-96,-2,-57,-3,-115,18,72,3,23,1,110,19,115,-3,-6,1,-16,-83,108,0,0,0,1,0,38,-1,-17,5,0,5,-65,0,26,0,0,1,22,31,1,2,3,7,6,3,2,7,2,19,15,1,38,47,1,18,63,1,54,1,22,55,18,55,4,-49,35,4,10,113,-90,33,-98,-85,-82,67,-29,46,33,86,48,6,6,-104,-125,86,-114,1,47,47,12,-83,60,5,-65,2,32,94,-2,110,-4,-93,24,20,2,100,1,-74,9,-3,124,-2,97,24,11,119,47,57,3,117,-49,11,18,-4,-95,52,2,3,-120,-114,0,0,2,0,49,-1,-15,4,2,5,-93,0,12,0,22,0,0,1,50,19,21,16,1,7,32,3,52,39,16,9,1,20,23,32,19,54,53,52,39,0,3,14,-79,67,-2,24,122,-2,-2,92,17,2,-122,-2,75,-116,1,15,-91,35,87,-3,-12,5,-93,-2,-117,-96,-3,-37,-2,-102,18,1,47,44,98,1,-17,2,6,-4,64,-46,92,2,57,80,-105,-108,119,-2,-59,0,2,0,29,-1,-73,4,42,5,-82,0,22,0,32,0,0,1,4,29,1,16,1,6,35,38,35,6,29,1,20,7,35,38,61,1,18,61,1,54,3,22,59,1,32,17,38,39,32,17,2,-58,1,100,-2,-84,-57,-6,30,17,31,46,62,62,108,-36,80,5,26,31,2,45,68,-76,-2,-115,5,-82,22,54,107,-2,-126,-2,-19,106,15,-31,111,-88,79,13,21,117,61,3,62,117,-73,-58,-3,35,30,2,53,26,20,-2,99,0,2,0,31,-1,96,4,-4,5,-100,0,25,0,42,0,0,1,51,50,19,21,20,1,22,23,51,55,22,29,1,6,35,34,3,39,4,35,36,17,16,1,54,1,22,51,50,55,2,53,52,55,51,50,19,18,53,52,37,0,3,16,66,-20,124,-2,-39,60,104,33,66,98,67,-126,-88,127,32,-2,-25,63,-2,-121,1,-4,-108,-2,36,115,114,-81,55,66,115,16,49,50,-27,-2,-23,-3,-61,5,-100,-2,28,125,110,-2,84,119,114,53,11,42,90,126,1,13,18,107,83,1,19,1,-105,2,32,107,-5,-87,108,-113,1,40,27,67,95,-2,-103,1,2,-84,-99,-72,-2,-100,0,0,0,0,2,0,32,-1,-86,4,78,5,-59,0,46,0,55,0,0,1,4,29,1,20,1,7,21,22,5,55,51,50,23,21,20,7,34,37,34,39,2,43,1,34,39,18,53,38,39,53,54,55,51,50,19,54,55,53,38,43,1,34,7,38,53,52,3,50,23,51,55,53,52,39,34,2,-109,1,58,-3,-5,37,90,1,-104,92,37,27,29,74,-127,-2,-58,45,-80,74,74,55,26,29,-127,-109,56,55,-90,19,106,41,-32,-74,55,-90,19,-122,-40,55,56,37,37,18,37,55,41,5,-59,36,-26,50,-42,-2,-12,50,17,103,-10,17,50,117,26,40,-7,117,-2,13,50,2,119,51,72,77,84,-49,109,-2,-127,80,-37,100,117,83,83,33,62,-3,-49,100,117,16,86,14,0,0,1,0,25,0,4,4,2,5,-92,0,36,0,0,1,51,50,23,6,35,34,39,4,17,21,20,5,4,21,16,5,36,61,1,52,37,21,4,29,1,23,51,36,61,1,38,33,38,53,16,37,2,-41,18,-122,24,35,-115,25,27,-2,-78,1,113,1,60,-3,83,-2,-60,1,-56,-2,-7,-45,35,1,-126,113,-2,-87,-27,1,-125,5,-92,70,-80,88,77,-2,-1,70,76,47,117,-22,-2,-90,58,32,-77,18,-17,112,18,-42,119,18,18,38,-48,18,-63,80,-90,1,109,-95,0,0,1,0,29,-1,-91,4,92,5,-89,0,29,0,0,1,22,29,1,20,5,34,3,34,21,23,2,43,1,34,39,18,17,53,52,55,51,53,35,34,5,35,34,39,52,4,15,77,-2,-107,76,38,19,76,90,62,19,26,70,96,57,95,19,122,-2,-98,39,99,15,5,-89,26,27,72,21,-116,-3,106,125,54,-2,101,89,1,-10,2,42,71,26,28,36,125,53,112,0,0,0,0,1,0,20,-1,-19,4,20,5,-55,0,33,0,0,19,51,50,23,21,2,29,1,20,23,51,54,19,55,52,39,38,53,55,51,32,29,1,16,1,6,43,1,34,3,18,61,1,52,-38,36,25,29,126,126,89,-9,-35,18,-58,36,36,90,1,13,-2,117,-111,125,89,-17,31,72,5,-55,51,-104,-3,124,-92,102,-88,84,123,2,-116,-105,75,-111,54,30,17,-53,67,-2,127,-3,-114,101,1,-91,2,-65,-116,118,118,0,0,0,0,1,0,34,-1,-46,4,43,6,5,0,23,0,0,1,22,29,1,0,3,6,35,38,17,2,53,54,51,50,19,2,21,20,23,51,0,19,54,3,-11,54,-2,84,-43,-114,54,-96,36,18,53,117,43,17,71,18,1,64,-60,118,6,5,84,50,33,-4,88,-2,-95,-123,45,3,72,1,95,67,-106,-2,-61,-2,-52,77,-70,-41,2,25,2,104,84,0,1,0,16,-1,-24,5,87,5,-103,0,34,0,0,19,51,50,19,22,51,18,55,52,55,51,50,19,22,23,51,18,59,1,22,23,0,17,2,7,34,3,38,35,6,3,6,43,1,34,16,61,100,69,24,22,-16,68,46,30,95,120,27,4,15,-10,92,16,55,21,-2,-5,65,58,-67,87,47,30,103,-52,59,18,30,53,5,-103,-4,127,80,2,-68,-123,23,25,-4,127,40,40,3,-15,30,66,-3,-112,-2,-1,-2,-37,123,3,48,-80,-37,-3,-117,96,0,0,1,0,33,-1,-15,4,-24,5,-99,0,32,0,0,1,51,22,29,1,20,1,0,21,34,21,34,1,34,39,2,3,7,35,34,39,52,1,52,55,0,61,1,52,55,50,1,0,4,15,16,34,-2,-96,2,7,16,-51,-2,-25,9,109,-13,-47,34,67,24,26,1,-43,17,-2,76,67,88,1,109,1,34,5,-99,5,27,32,81,-2,125,-3,113,-7,16,2,101,97,-2,-59,-2,-107,16,48,96,2,-73,17,32,1,85,46,16,25,40,-2,-35,1,46,0,0,0,1,0,28,-1,-25,4,-64,6,14,0,24,0,0,1,51,50,21,20,1,6,25,1,20,7,35,34,53,17,16,37,38,53,54,59,1,50,9,1,4,82,55,55,-2,-109,92,73,55,36,-2,91,-110,25,48,92,-93,1,19,1,-91,6,14,66,48,-2,29,-13,-2,-98,-2,-59,26,40,33,2,2,1,83,-15,34,33,116,-2,-59,2,35,0,0,0,1,0,21,0,28,4,127,5,127,0,29,0,0,19,50,5,54,51,22,21,6,1,21,23,50,37,23,6,35,4,5,32,53,52,1,54,53,39,33,34,61,1,52,-78,111,1,56,-18,92,-115,45,-3,107,63,-66,1,-12,32,12,35,-2,69,-2,-39,-2,-58,2,69,78,94,-3,-53,31,5,127,15,15,23,69,-127,-4,126,15,15,46,16,-42,16,30,-118,105,2,-61,-112,55,16,30,31,-103,0,1,0,46,0,5,2,30,5,126,0,30,0,0,19,51,22,51,33,22,21,6,43,1,39,17,20,7,22,21,6,21,20,5,22,29,1,20,35,37,19,52,3,53,54,88,15,101,12,1,27,43,30,84,42,-86,28,14,14,1,13,42,28,-2,87,42,42,9,5,126,28,14,71,85,14,-2,102,-121,-23,75,10,55,59,53,32,70,43,14,28,85,2,-89,50,1,-52,42,85,0,0,0,0,1,0,16,-1,106,2,90,5,29,0,11,0,0,1,22,29,1,20,3,2,3,34,39,53,0,2,37,53,-52,-90,-125,55,30,1,119,5,29,37,77,14,31,-2,5,-2,17,-2,-42,71,14,4,79,0,1,0,46,0,5,2,30,5,126,0,30,0,0,0,23,21,2,21,19,5,34,61,1,52,55,36,53,52,39,52,55,38,53,17,7,35,34,39,52,55,33,50,55,51,2,21,9,43,43,-2,87,29,43,1,13,14,14,28,-86,43,84,29,42,1,28,12,101,14,5,126,85,42,-2,52,50,-3,89,85,28,14,43,70,32,53,59,55,10,75,-23,-121,1,-102,14,85,71,14,28,0,0,0,1,0,36,3,92,2,-98,5,-108,0,15,0,0,1,22,19,21,35,34,3,35,2,7,35,38,53,54,53,54,1,-119,-120,-115,57,60,-96,56,-96,70,29,42,-125,84,5,-108,-118,-2,-97,65,1,127,-2,-116,23,11,54,-3,12,-18,0,1,0,33,-1,83,3,-93,-1,-11,0,9,0,0,5,21,6,39,37,38,7,38,55,54,3,-93,6,-29,-2,-57,99,-43,40,2,1,11,14,-108,1,5,4,6,64,65,25,0,0,0,0,1,0,55,4,18,1,41,5,123,0,10,0,0,19,55,54,19,6,15,1,38,47,1,54,80,42,39,-120,14,21,15,-81,12,5,1,5,114,4,5,-2,-43,58,3,1,-91,113,42,29,0,0,0,0,2,0,30,0,3,3,-46,3,-4,0,25,0,33,0,0,1,50,23,2,21,23,22,55,51,50,21,6,7,34,3,35,20,7,36,17,18,59,1,50,23,54,5,6,17,20,23,54,19,52,2,106,88,26,98,49,102,127,17,49,61,-55,-104,60,17,-60,-2,-5,82,-44,33,36,-96,31,-2,-4,-93,98,108,-119,3,-4,67,-2,-95,-7,-72,74,-103,67,-91,13,1,10,44,-34,79,1,48,2,88,50,76,-97,-95,-2,-67,-115,59,64,2,8,33,0,0,0,0,2,0,46,0,3,2,-17,5,-109,0,23,0,32,0,0,19,50,29,1,51,4,17,21,2,33,35,34,39,54,61,1,52,39,52,55,2,17,53,54,19,23,19,51,32,19,52,37,6,112,114,-125,1,-118,116,-2,-87,82,86,78,49,16,16,16,5,-121,3,4,49,1,17,72,-2,-39,91,5,-109,-4,-57,70,-2,-52,72,-3,-11,90,-22,18,36,123,94,13,95,1,116,1,39,18,36,-3,109,-33,-2,114,1,-115,-5,37,30,0,0,0,0,1,0,43,0,22,3,62,3,-11,0,22,0,0,1,51,50,23,6,21,35,39,35,6,29,1,16,59,1,37,23,6,35,32,17,53,18,1,124,16,-100,53,16,32,-95,80,-112,-80,32,1,-78,16,-25,-37,-2,-81,75,3,-11,126,30,60,54,94,-62,55,-2,-86,-112,36,-4,1,-44,127,1,-116,0,1,0,43,-1,-15,3,-22,5,-9,0,43,0,0,1,51,50,23,20,3,21,16,51,50,55,22,7,6,7,35,38,17,35,2,35,34,3,34,61,1,16,59,1,22,29,1,20,43,1,39,20,7,21,16,23,0,17,18,2,-47,13,20,21,-126,-119,60,106,54,30,38,-84,28,-44,14,-105,109,110,81,14,-51,69,82,28,27,-119,41,82,1,4,123,5,-13,51,120,-3,-127,17,-3,-71,-103,26,52,-66,13,49,1,63,-2,-87,1,70,17,-119,1,-66,10,41,86,34,17,57,63,69,-2,-59,96,1,95,1,-109,2,79,0,2,0,28,-1,-9,3,44,3,-7,0,20,0,29,0,0,1,4,21,20,5,6,29,1,22,51,33,55,21,6,33,35,36,53,39,19,54,3,21,51,36,53,38,39,35,6,1,-92,1,22,-2,120,82,26,-86,1,22,114,42,-2,-78,16,-2,-54,82,114,94,12,16,1,55,29,86,16,-60,3,-7,76,-68,-40,-99,5,42,16,-54,16,47,93,45,-6,-116,1,102,-23,-3,-1,15,107,-84,70,55,86,0,0,0,1,0,35,-2,-59,2,-92,5,-110,0,42,0,0,1,22,29,1,20,7,35,34,47,1,35,34,22,23,55,23,20,43,1,21,18,21,16,35,38,53,38,55,22,59,1,50,19,52,3,7,38,53,36,53,38,3,52,1,-39,-53,44,72,29,15,29,43,63,13,33,-52,14,-126,58,66,-24,-52,17,46,77,69,58,53,19,52,-24,73,1,35,48,23,5,-110,20,-46,53,25,27,-80,18,-3,-41,17,35,-97,17,-2,89,127,-2,124,28,-90,75,13,-115,1,9,-70,1,90,53,28,95,79,45,-114,1,17,-62,0,0,0,0,2,-1,109,-2,-113,2,100,3,-6,0,27,0,37,0,0,1,50,23,51,50,23,6,21,20,19,16,33,36,17,55,22,59,1,50,17,52,39,6,35,34,3,53,54,19,21,20,23,50,19,38,39,35,6,1,64,111,65,73,20,23,43,14,-2,-80,-2,118,29,-119,-72,44,-37,14,125,51,-33,25,64,53,117,-126,60,113,48,15,-125,3,-6,-110,73,-47,107,-114,-2,-52,-2,110,26,1,23,12,-37,1,-123,42,-42,86,1,-61,24,-1,-2,-36,109,106,113,1,36,-29,4,78,0,0,0,0,1,0,27,0,3,3,-68,5,-96,0,40,0,0,19,51,18,29,1,18,51,22,21,2,21,20,23,51,50,55,51,22,21,6,7,34,17,53,52,55,35,34,3,2,43,1,34,39,53,18,61,1,2,53,52,-49,49,49,-39,109,66,33,33,16,76,118,16,33,58,-38,-109,17,17,117,-79,43,38,33,85,13,-109,33,5,-96,-2,-118,-13,66,1,6,22,125,-2,75,122,30,-106,115,5,28,-57,13,1,5,-27,106,-81,-2,35,-2,-38,49,49,1,-67,-110,114,2,16,41,26,0,0,0,0,2,0,40,-1,-1,2,-58,5,-122,0,7,0,35,0,0,1,22,21,7,38,39,53,52,19,22,21,6,3,6,21,22,59,1,54,19,51,22,21,2,43,1,34,53,52,19,35,6,35,39,53,52,1,-114,-84,47,36,-121,-7,16,34,-87,16,38,25,47,63,77,31,31,31,-69,62,-115,-84,16,-7,109,47,5,-122,89,113,34,6,-110,50,34,-2,107,32,18,-71,-2,57,33,18,-121,13,1,85,5,29,-2,58,-37,-56,1,-89,67,67,17,56,0,0,0,0,2,-1,10,-2,19,2,92,5,120,0,9,0,45,0,0,1,22,29,1,6,35,38,61,1,52,19,51,22,29,1,7,20,19,16,15,1,35,32,39,38,55,23,21,6,21,22,59,1,50,17,53,52,3,35,6,35,39,53,52,55,54,1,-72,-92,33,65,-109,114,49,33,98,16,-60,114,33,-2,-81,26,13,-125,16,20,29,-85,49,-44,32,17,-36,25,16,-11,102,5,120,40,46,14,58,24,34,57,33,-2,121,5,24,29,-27,-113,-3,-62,-2,-95,108,29,-19,112,104,28,15,124,20,-105,1,-67,57,-116,1,-122,43,29,57,37,64,-55,0,0,0,0,1,0,52,-1,-6,3,49,5,-93,0,28,0,0,19,50,19,2,21,36,53,51,22,29,1,20,7,22,1,7,38,1,2,43,1,34,53,18,25,1,52,39,52,-63,90,31,20,1,5,40,41,-54,46,1,81,40,-53,-2,-45,80,81,20,40,121,40,5,-93,-2,108,-2,-27,-101,-62,-80,5,28,51,126,-28,-100,-2,-93,17,73,1,-113,-2,23,51,2,27,1,98,1,13,20,-91,25,0,0,0,1,0,32,-1,-1,2,42,5,-119,0,18,0,0,1,22,21,2,29,1,20,23,54,55,22,21,2,7,38,61,1,18,51,1,93,18,-30,-92,-125,81,37,97,-50,-37,-107,-106,5,-119,36,19,-3,43,-77,74,-71,71,59,-97,6,31,-2,-16,38,96,-22,-72,3,-120,0,1,0,11,-1,-18,5,-121,3,-5,0,52,0,0,1,22,21,7,20,51,6,21,20,23,51,50,55,51,50,23,6,35,34,17,53,6,3,6,43,1,34,39,18,17,53,52,43,1,2,17,6,35,38,53,19,53,52,39,54,51,22,21,18,51,50,17,18,3,-48,56,14,14,28,-102,14,98,89,14,20,22,112,-83,-4,-71,108,19,23,56,22,34,70,28,28,-4,51,47,42,42,84,59,53,84,-32,28,-74,-5,3,-5,62,-107,97,16,-50,53,-34,38,-110,48,-13,2,6,-45,-112,-3,-9,113,65,1,80,1,24,64,33,-2,-36,-2,91,49,53,28,1,68,65,-120,-84,65,68,127,1,20,-2,-3,1,100,0,0,0,1,0,22,-1,-1,3,-6,4,2,0,40,0,0,1,22,21,2,21,18,59,1,54,59,1,22,21,6,43,1,34,3,53,54,61,1,6,3,6,43,1,34,39,53,19,53,52,39,53,54,59,1,22,17,0,2,108,92,46,30,123,31,108,14,15,31,60,-117,31,-65,69,30,-62,127,26,66,31,22,24,77,123,5,26,30,-72,1,9,4,2,34,98,-2,-97,62,-2,-92,34,6,28,-124,1,-32,17,-68,77,50,-110,-2,94,-25,49,50,1,75,-74,-118,78,66,33,41,-2,-18,1,-114,0,2,0,24,0,3,3,68,3,-6,0,12,0,26,0,0,1,32,29,1,16,1,35,38,17,53,16,37,50,7,20,7,6,29,1,20,59,1,50,19,54,53,38,2,22,1,46,-2,50,127,-33,1,110,-123,53,-97,-112,-128,16,-60,-86,48,107,3,-6,-15,-119,-2,-87,-2,-38,55,1,33,35,1,116,-9,120,63,92,-72,92,120,-101,1,-116,119,105,86,0,0,0,1,0,31,-2,100,2,-58,3,-4,0,32,0,0,1,32,23,21,16,5,6,35,23,21,20,35,38,53,19,39,54,59,1,22,21,2,21,51,36,61,1,52,39,34,39,53,54,1,106,1,36,56,-2,15,39,11,17,50,99,66,16,21,61,17,83,33,16,1,59,-41,49,34,87,3,-4,-58,107,-2,-76,-9,122,-104,-12,30,38,99,3,39,-103,-43,42,95,-2,-54,-78,-53,-47,76,108,29,61,46,15,0,0,2,0,37,-2,110,3,37,3,-6,0,23,0,33,0,0,1,51,50,5,20,3,6,21,7,51,54,55,22,21,6,7,34,53,19,6,35,34,3,52,23,21,20,23,18,61,1,38,39,34,1,26,65,93,1,11,-92,16,33,16,127,-121,33,94,-62,-93,75,113,67,-85,41,-125,114,-11,-49,5,54,3,-6,-53,60,-3,-21,-120,98,-21,77,-97,5,27,-26,-127,-100,2,34,109,2,19,-33,-80,110,-44,84,1,82,114,16,67,11,0,0,0,0,1,0,31,-1,-4,3,69,3,-9,0,30,0,0,19,50,19,18,51,50,55,22,23,21,20,43,1,39,2,29,1,20,7,35,34,39,54,61,1,16,39,35,7,53,52,77,-22,115,-52,24,16,30,97,40,31,45,76,-58,46,76,11,34,15,-74,16,106,3,-9,-2,-106,1,56,17,38,94,33,33,17,-2,-78,-48,-91,85,13,49,-63,86,99,1,57,114,33,-108,13,0,0,0,1,0,35,-1,-12,2,-35,4,6,0,34,0,0,1,22,29,1,20,7,35,34,39,35,34,21,22,5,22,21,20,5,34,7,38,53,54,51,20,51,7,51,36,53,36,39,38,39,18,1,-32,-122,74,30,37,8,29,-18,118,1,86,75,-2,37,85,19,119,39,109,15,29,14,1,-111,-2,113,76,58,1,120,4,6,28,39,67,23,61,67,-105,89,-126,88,80,-20,100,17,44,91,-71,17,-121,35,-72,-82,44,95,73,1,13,0,0,0,0,2,0,34,-1,-3,3,-60,4,-6,0,33,0,39,0,0,1,22,51,23,21,6,5,6,29,1,20,23,51,54,19,22,21,2,43,1,38,53,54,55,35,34,7,38,61,1,52,37,54,19,23,20,7,51,54,51,2,55,100,-89,19,10,-2,-58,95,114,77,-89,-122,38,-81,-72,95,-66,19,38,38,13,-2,38,1,106,38,38,95,38,38,108,45,4,-6,-9,41,42,48,-119,123,-111,-92,123,83,118,1,16,7,34,-2,39,120,-67,-36,-105,103,51,11,41,40,104,66,1,90,83,-109,100,62,0,0,0,0,1,0,29,0,3,3,-31,3,-7,0,37,0,0,1,51,50,23,21,20,3,18,51,50,55,51,50,23,6,7,35,34,3,6,3,6,35,34,3,53,52,19,51,50,21,2,21,17,50,55,54,19,2,98,13,36,18,54,39,-105,26,109,14,21,10,44,-120,68,-94,81,25,124,93,82,-126,19,54,27,95,41,-124,71,75,127,3,-7,127,48,68,-2,-24,-2,-93,-116,61,-48,13,1,108,6,-2,-23,79,1,124,111,-80,1,43,79,-2,-54,102,-2,-45,-3,127,1,-84,0,0,1,0,21,-1,-11,3,114,4,35,0,20,0,0,1,23,21,1,6,35,34,3,38,61,1,52,55,51,50,19,18,51,54,19,54,3,85,29,-2,-88,95,106,47,-59,72,43,14,113,45,-127,29,-99,-111,81,4,35,46,47,-4,-23,-70,2,-39,115,71,31,23,24,-2,-23,-2,46,-32,1,-38,124,0,1,0,30,-1,-17,4,-96,4,19,0,31,0,0,19,51,50,19,54,19,55,51,22,19,51,54,19,55,23,21,0,7,34,3,39,6,3,7,35,34,39,53,52,3,53,54,72,14,96,45,45,-76,71,14,87,-104,28,88,-104,84,56,-2,-21,103,-105,74,56,70,-44,28,56,39,18,70,9,4,19,-3,106,57,1,-89,16,25,-3,-59,-94,2,5,33,83,33,-4,-17,75,1,-66,-107,14,-3,-86,17,-90,-107,-96,1,-60,33,100,0,0,0,0,1,0,55,-1,-10,3,-123,4,45,0,38,0,0,1,51,22,29,1,20,7,22,17,20,7,35,34,53,51,22,51,54,39,52,39,35,0,35,39,52,1,54,53,38,35,6,35,39,52,55,4,51,54,3,56,16,31,-102,-72,-115,46,-117,31,65,58,68,19,107,62,-2,114,-115,15,1,-127,77,-115,29,-125,69,15,108,1,107,52,74,4,45,5,29,16,71,-27,-58,-2,-36,-23,6,-90,66,42,-76,91,-89,-3,-21,34,76,1,-106,-110,20,50,16,33,71,62,83,-23,0,0,1,-1,-115,-2,55,3,3,3,-6,0,43,0,0,1,51,50,23,6,3,2,43,1,38,3,53,52,55,50,23,22,59,1,32,17,53,6,43,1,38,53,19,38,43,1,6,35,39,52,37,22,21,2,29,1,50,19,18,2,-77,13,47,20,40,27,-113,-53,-122,-7,90,40,48,42,80,-100,40,1,64,-85,-120,13,40,53,48,45,13,89,71,14,1,24,107,27,101,126,16,3,-6,-98,-114,-4,-47,-2,-104,19,1,10,57,21,23,-112,127,1,-89,-39,-25,-128,88,1,-7,43,101,29,-91,51,112,90,-2,-68,-105,44,1,-22,1,18,0,0,1,0,32,0,54,3,109,3,-52,0,28,0,0,1,22,21,1,51,36,53,51,22,21,20,5,35,39,53,54,55,18,55,35,6,43,1,34,53,54,59,1,50,2,-76,41,-2,108,13,1,-71,40,54,-3,-23,-81,-121,5,-72,-21,48,14,73,48,67,-26,19,76,40,103,3,-52,64,38,-3,97,30,43,19,112,79,8,14,88,36,95,1,99,-101,15,73,73,0,1,0,-80,-1,123,2,-84,5,-30,0,41,0,0,1,50,23,6,43,1,34,39,34,7,21,20,23,21,20,35,21,22,23,2,21,22,29,1,20,51,55,23,21,6,43,1,38,53,19,38,61,1,54,51,3,18,1,-18,79,31,20,21,69,31,25,105,19,-104,110,46,50,58,14,55,-49,14,76,-125,83,124,3,69,19,91,-118,50,5,-30,83,55,13,-91,69,-128,-94,83,42,14,60,105,-2,-79,19,75,50,55,41,41,28,13,111,18,106,2,36,-77,14,42,55,1,48,1,117,0,0,1,1,0,-1,53,1,-97,5,-89,0,11,0,0,1,22,31,1,22,3,18,3,6,47,1,2,1,47,62,29,5,11,22,27,12,52,53,5,37,5,-89,14,71,14,29,-3,113,-3,-10,-2,-68,21,55,13,4,-7,0,1,0,42,-1,123,2,38,5,-30,0,41,0,0,0,19,3,50,23,21,20,7,19,20,7,35,34,39,53,55,23,50,61,1,52,55,52,3,54,55,53,34,61,1,54,61,1,38,35,6,43,1,34,39,54,51,1,-12,50,-118,91,20,70,3,124,83,-125,76,14,-49,55,14,58,50,47,111,-104,19,105,25,31,69,20,21,32,78,5,-30,-2,-117,-2,-48,55,42,14,-77,-3,-36,106,18,111,13,28,41,41,55,50,75,19,1,79,105,60,14,42,83,-94,-128,69,-91,13,55,83,0,0,1,0,47,1,-35,4,36,2,-5,0,22,0,0,1,23,7,6,47,1,38,47,1,6,7,6,47,1,54,37,23,22,31,1,22,55,54,4,13,23,1,118,-70,52,68,-61,39,-105,100,53,39,11,12,1,81,52,54,-46,26,98,-120,22,2,-13,45,14,-37,15,4,6,-112,3,18,114,10,4,29,-87,54,4,5,-125,2,8,-123,12,0,0,0,2,0,-82,-1,66,1,-76,3,-12,0,10,0,20,0,0,23,39,53,18,53,50,53,50,21,2,35,19,35,38,53,54,59,1,50,23,20,-68,14,111,13,111,117,49,111,69,56,19,37,96,22,33,-66,27,83,2,-108,100,14,55,-4,-48,3,-15,28,55,97,56,72,0,0,0,0,2,0,73,-1,67,3,92,5,84,0,40,0,49,0,0,55,38,17,53,18,33,51,50,23,18,55,22,29,1,20,3,22,23,22,7,35,39,6,7,6,7,22,59,1,37,23,6,35,34,39,6,7,34,39,53,54,1,39,35,6,29,1,20,23,18,-77,106,75,1,6,16,53,42,108,64,53,-128,10,7,52,68,32,19,38,47,80,73,22,26,32,1,-78,16,-25,-37,72,57,50,45,55,30,40,1,59,30,80,-112,35,124,109,116,1,6,127,1,-116,15,1,4,109,37,77,14,22,-2,-42,15,17,69,21,6,89,107,-16,-62,7,-112,36,-4,22,127,103,71,14,111,3,63,10,94,-62,55,-103,85,1,76,0,1,0,76,0,0,3,-88,5,-82,0,48,0,0,1,38,43,1,34,7,6,21,20,23,20,23,33,21,33,22,23,22,21,20,7,33,50,55,23,7,33,55,54,53,52,39,38,39,35,53,51,38,53,52,54,59,1,50,22,29,1,35,38,2,-20,72,88,2,100,90,84,1,53,1,104,-2,-78,14,17,35,-94,1,-110,-126,59,49,103,-3,49,1,-69,34,17,14,-95,-121,58,-9,-73,4,75,-35,58,5,5,67,31,101,93,-108,15,15,-121,-118,60,30,30,63,75,-95,-42,-124,1,-25,50,-18,-76,77,66,32,30,60,-113,110,-30,-14,28,20,-95,61,0,2,0,122,1,76,3,123,4,78,0,31,0,75,0,0,1,22,23,22,51,50,55,54,55,54,55,54,53,52,39,38,39,38,39,38,35,34,7,6,7,6,7,6,21,20,23,22,3,39,55,23,54,55,54,51,50,23,22,23,55,23,7,22,23,22,21,20,7,6,7,23,7,39,6,7,6,35,34,39,38,39,7,39,55,38,39,38,53,52,55,54,1,94,41,58,29,29,29,29,58,41,40,17,9,9,17,40,41,59,29,29,29,29,58,40,39,17,10,9,16,69,118,80,118,44,55,44,45,41,42,57,45,118,80,117,31,17,12,12,17,31,117,80,118,45,56,42,43,42,43,57,45,118,80,118,32,16,12,13,16,2,48,40,17,8,8,17,40,41,58,29,29,29,29,58,41,40,17,8,9,17,39,40,58,30,30,28,28,59,1,46,118,81,118,30,16,14,12,17,31,118,81,117,46,56,42,43,42,43,56,46,117,81,118,32,16,12,12,16,32,118,81,117,46,57,42,42,44,43,55,0,0,1,0,8,-1,-12,4,-6,4,-68,0,-114,0,0,37,39,52,38,39,37,34,38,53,52,54,51,33,39,33,34,38,53,52,54,51,33,38,39,38,35,34,38,53,52,54,51,50,22,59,1,50,22,21,20,6,35,34,38,35,34,6,21,20,22,31,1,22,23,22,51,50,54,55,1,62,1,53,52,38,39,38,39,38,53,52,54,51,50,23,22,59,1,50,54,51,50,22,23,20,7,6,7,6,7,6,15,1,33,50,22,21,20,6,35,33,14,1,7,33,50,22,21,20,6,35,33,20,6,21,23,20,22,23,30,1,21,20,6,35,34,38,35,34,6,35,34,38,53,52,54,55,54,55,54,55,62,1,2,35,2,3,3,-2,28,14,14,13,15,1,-45,121,-2,-88,17,13,12,16,1,51,43,65,-125,96,7,12,21,22,27,-64,68,88,33,16,30,23,6,25,6,24,27,33,30,-98,13,20,41,30,9,15,7,1,21,8,10,20,27,15,26,47,16,17,3,12,56,52,-117,30,70,2,11,15,1,38,18,9,63,84,7,5,-87,1,67,15,18,12,17,-2,-110,46,101,2,1,-1,18,15,14,15,-3,-18,2,2,11,15,30,-101,20,15,2,67,31,91,-21,25,31,18,16,29,9,16,74,18,17,14,-31,-14,19,32,16,1,13,13,13,12,-84,11,13,14,11,57,98,-59,11,6,19,17,16,13,20,8,12,4,19,16,18,68,43,-35,19,34,70,10,10,1,-116,12,29,10,18,18,5,2,2,3,22,15,15,1,7,2,9,7,28,6,3,2,15,102,9,6,-50,12,11,15,11,57,111,4,11,12,14,14,11,39,10,-41,114,72,8,17,4,29,12,16,8,8,8,12,12,13,6,2,3,16,16,13,68,0,0,0,2,1,-85,-2,94,2,75,6,42,0,3,0,7,0,0,1,51,17,35,17,51,17,35,1,-85,-96,-96,-96,-96,1,115,-4,-21,7,-52,-4,-21,0,0,0,2,0,-86,-2,96,3,76,5,-82,0,17,0,84,0,0,1,54,55,54,53,52,39,35,38,39,38,39,38,35,34,6,21,20,19,54,55,54,53,52,37,46,1,53,52,55,54,55,39,46,1,53,52,55,54,55,54,59,1,50,22,29,1,35,38,39,38,39,35,34,6,21,20,5,30,1,21,20,7,6,7,22,23,22,21,20,7,6,7,53,6,43,1,34,38,61,1,51,22,23,22,2,33,56,41,73,1,2,1,3,22,91,59,67,78,94,-87,113,72,72,-2,-60,123,105,89,67,103,40,123,105,89,82,-122,8,9,3,66,-62,51,5,75,70,79,15,78,94,1,31,-107,111,101,47,52,108,46,55,101,124,-103,6,7,3,66,-62,51,5,75,68,1,65,16,37,65,101,5,5,14,13,61,66,29,89,73,123,-4,-26,6,63,64,101,125,-105,64,-110,104,-108,89,65,17,19,64,-110,104,-108,89,79,7,1,33,25,-62,81,51,47,4,89,73,-124,-119,67,-103,111,-85,111,39,25,56,62,77,110,-85,112,102,3,1,1,33,25,-62,81,51,45,0,0,0,2,0,-47,4,118,3,22,5,93,0,19,0,39,0,0,19,55,54,51,50,31,1,22,21,20,15,1,6,35,34,47,1,38,53,52,37,55,54,51,50,31,1,22,21,20,15,1,6,35,34,47,1,38,53,52,-33,71,13,12,11,16,69,10,12,69,17,8,14,11,76,9,1,123,71,13,12,11,16,69,10,12,69,17,8,14,11,76,9,5,9,72,12,14,73,14,11,13,14,75,17,12,86,12,11,13,13,72,12,13,74,14,11,13,13,76,17,12,87,11,11,13,0,0,0,3,0,100,-1,-18,6,38,5,-80,0,23,0,47,0,90,0,0,1,50,4,23,22,18,21,20,2,7,6,4,35,34,36,39,38,2,53,52,18,55,54,36,1,14,1,21,20,22,23,30,1,51,50,54,55,62,1,53,52,38,39,46,1,35,34,6,1,34,46,1,53,52,62,1,51,50,22,23,22,51,50,55,51,23,35,38,39,38,43,1,14,1,7,6,21,20,23,30,1,23,22,23,50,54,53,51,21,20,6,3,72,-111,1,14,104,102,113,113,106,105,-2,-12,-107,-110,-2,-8,106,106,111,111,104,102,1,17,-2,-77,95,102,102,97,98,-14,-121,-119,-11,97,97,104,104,93,96,-8,-122,-119,-6,1,-99,-114,-12,-128,-125,-12,-124,38,74,39,5,4,19,7,42,72,44,52,79,72,75,15,86,-95,41,33,2,11,117,91,72,94,124,-116,53,-63,5,-80,113,104,101,-2,-18,-110,-109,-2,-14,105,105,109,111,105,104,1,11,-107,-108,1,14,103,104,113,-2,-3,96,-9,-120,-119,-12,97,96,102,101,95,98,-9,-121,-122,-5,94,96,103,103,-5,-46,-120,-22,126,126,-20,-123,13,14,1,30,-58,94,30,26,8,126,114,90,94,25,25,121,-50,49,40,2,112,70,100,46,81,0,2,0,-125,3,-29,1,-4,5,120,0,25,0,33,0,0,1,50,23,6,21,23,22,55,51,50,21,6,7,34,39,35,20,7,38,53,54,59,1,50,23,54,7,6,21,20,23,54,55,52,1,109,35,10,39,20,40,51,6,20,24,80,61,24,6,78,104,32,85,13,15,63,12,103,65,39,43,54,5,120,27,-117,100,72,30,61,27,66,5,106,17,89,32,121,-18,19,30,64,63,-127,56,23,25,-49,13,0,0,0,0,2,0,-82,0,-80,3,75,3,14,0,7,0,15,0,0,19,1,51,21,3,19,21,35,3,1,51,21,3,19,21,35,-82,1,86,14,-51,-51,14,29,1,86,14,-51,-51,14,1,-33,1,47,37,-2,-10,-2,-10,37,1,47,1,47,37,-2,-10,-2,-10,37,0,0,0,1,0,87,1,19,3,-97,2,-1,0,6,0,0,19,33,17,7,35,17,33,87,3,72,1,98,-3,27,2,-1,-2,21,1,1,-120,0,0,4,0,100,-1,-18,6,38,5,-80,0,18,0,57,0,81,0,105,0,0,1,17,23,22,23,22,59,1,62,1,55,54,53,52,39,46,2,35,19,23,22,59,1,21,33,53,51,50,53,52,47,1,34,39,21,20,59,1,21,33,53,51,50,53,17,52,43,1,53,33,22,23,30,1,21,20,6,3,50,4,23,22,18,21,20,2,7,6,4,35,34,36,39,38,2,53,52,18,55,54,36,1,14,1,21,20,22,23,30,1,51,50,54,55,62,1,53,52,38,39,46,1,35,34,6,2,-17,3,23,33,29,27,6,31,61,16,13,1,4,48,65,31,-116,82,100,50,34,-2,-90,45,30,69,75,42,42,36,53,-2,-60,43,37,37,43,1,100,64,61,60,65,64,-30,-111,1,14,104,102,113,113,106,105,-2,-12,-107,-110,-2,-8,106,106,111,111,104,102,1,17,-2,-77,95,102,102,97,98,-14,-121,-119,-11,97,97,104,104,93,96,-8,-122,-119,-6,4,75,-2,-118,8,56,25,22,4,69,63,50,53,13,14,67,115,37,-3,-11,116,-115,50,50,22,29,85,102,42,-97,121,50,50,121,2,26,121,70,1,41,41,-110,79,78,-111,3,50,113,104,101,-2,-18,-110,-109,-2,-14,105,105,109,111,105,104,1,11,-107,-108,1,14,103,104,113,-2,-3,96,-9,-120,-119,-12,97,96,102,101,95,98,-9,-121,-122,-5,94,96,103,103,0,0,1,0,55,4,-4,3,-71,5,92,0,9,0,0,1,21,6,39,37,38,7,38,55,54,3,-71,6,-29,-2,-57,99,-43,40,2,1,5,92,8,88,1,3,2,3,38,38,15,0,0,0,2,0,60,3,118,2,104,5,-94,0,11,0,23,0,0,1,34,6,21,20,22,51,50,54,53,52,38,39,50,22,21,20,6,35,34,38,53,52,54,1,83,86,123,122,87,87,120,121,86,115,-94,-92,115,117,-96,-93,5,92,122,87,87,120,120,87,87,122,70,-93,115,114,-92,-94,116,116,-94,0,2,0,111,0,47,3,48,4,76,0,36,0,46,0,0,1,22,29,1,20,51,50,55,22,23,21,20,7,6,7,22,29,1,20,7,35,34,39,54,39,38,35,6,35,39,53,54,51,22,51,39,54,19,23,6,37,39,38,39,54,23,22,2,55,28,96,31,24,64,6,-76,36,13,14,56,27,72,11,41,6,88,22,-93,72,14,46,-109,-84,8,14,51,-2,18,2,-3,-28,14,72,8,8,-8,-56,4,76,4,24,96,125,14,27,28,42,41,14,33,-102,24,32,41,75,35,41,-111,-62,28,14,28,27,83,13,-35,41,-4,-127,126,32,3,1,5,42,110,18,15,0,1,0,-21,3,99,2,-104,5,124,0,30,0,0,1,22,21,22,21,20,7,51,50,55,22,23,7,6,39,5,38,39,52,55,54,55,53,52,39,6,43,1,38,53,52,1,96,-50,12,94,17,59,81,28,3,41,40,25,-2,-8,43,16,117,71,76,53,40,24,59,47,5,124,28,35,38,59,70,-81,14,16,60,25,5,10,50,5,16,81,16,32,-36,27,18,17,7,4,52,40,0,0,0,1,0,-31,3,67,2,27,5,124,0,35,0,0,1,51,50,23,21,20,7,22,29,1,20,7,6,35,38,53,52,51,22,51,54,53,52,39,35,34,7,38,53,55,54,53,38,47,1,54,1,4,49,-122,19,35,112,-95,28,13,56,28,22,13,-117,14,49,56,104,35,112,55,62,84,7,4,5,124,94,7,37,64,9,70,93,78,102,15,9,20,43,14,115,65,11,54,44,10,41,65,54,46,28,8,15,43,0,0,0,1,1,60,4,54,3,9,5,-102,0,11,0,0,1,62,1,51,50,22,21,20,6,7,5,35,2,95,35,41,20,33,41,31,31,-2,-74,69,5,95,35,24,40,31,22,40,20,-53,0,1,0,93,0,0,3,-95,5,-101,0,15,0,0,1,21,35,17,35,17,35,17,35,17,46,1,53,52,54,51,3,-95,127,82,-90,84,-82,-53,-41,-78,5,-101,70,-6,-85,5,85,-6,-85,2,-30,8,-67,-105,-99,-64,0,1,0,-127,2,56,1,123,3,70,0,19,0,0,19,55,54,51,50,31,1,22,21,20,15,1,6,35,34,47,1,38,53,52,-111,82,15,14,13,18,80,12,14,80,20,9,16,13,88,10,2,-28,84,14,16,86,16,13,15,16,88,20,14,101,13,13,15,0,0,1,1,104,-2,94,3,0,0,0,0,24,0,0,1,22,51,50,54,53,52,39,38,35,34,7,55,51,7,54,55,50,22,21,20,6,35,34,39,1,104,85,67,66,57,49,40,62,16,18,48,63,37,32,30,86,96,117,102,109,80,-2,-34,52,43,45,45,19,16,2,-80,104,4,1,81,73,76,89,32,0,0,1,1,93,3,109,1,-33,5,124,0,11,0,0,1,22,21,23,6,3,6,35,34,39,54,19,1,-52,14,5,34,18,19,10,38,11,28,41,5,124,2,12,43,47,-2,-121,46,28,-118,1,105,0,0,1,0,-118,3,64,1,-6,5,-125,0,33,0,0,1,51,50,23,21,20,7,6,43,1,38,61,1,52,55,51,50,23,20,7,6,21,20,59,1,50,19,53,38,39,7,38,53,54,1,-71,19,18,28,-66,22,18,33,105,86,26,10,16,59,7,46,27,109,49,7,26,-104,6,65,5,-125,-125,73,-6,111,14,22,-100,7,126,-126,26,18,-116,36,23,119,1,14,40,115,10,46,12,7,92,0,2,0,101,0,-80,3,2,3,14,0,7,0,15,0,0,55,35,53,19,3,53,51,1,3,35,53,19,3,53,51,1,115,14,-51,-51,14,1,86,29,14,-51,-51,14,1,86,-80,37,1,10,1,10,37,-2,-47,-2,-47,37,1,10,1,10,37,-2,-47,0,0,0,0,3,0,110,0,21,4,38,5,124,0,10,0,57,0,69,0,0,1,23,6,1,20,7,35,34,54,1,18,19,22,29,1,20,7,51,54,53,52,51,22,21,20,7,22,51,54,51,23,20,7,35,6,29,1,20,23,20,7,35,34,39,54,61,1,35,34,7,35,34,61,1,52,55,54,55,1,22,21,23,6,3,6,35,34,39,54,19,3,118,28,58,-3,-64,71,71,28,107,1,-128,-67,4,52,113,9,86,78,18,18,9,9,108,13,17,26,104,34,8,52,17,13,21,25,17,42,-108,18,17,-126,35,17,-2,-75,14,5,34,18,19,11,37,11,28,41,5,49,42,-80,-4,-123,44,41,-79,2,88,1,90,-3,-6,6,20,35,91,-18,9,17,-91,3,15,34,78,26,8,26,45,7,11,67,34,31,47,74,30,34,-103,64,9,44,18,8,19,-67,95,-99,2,-87,2,12,43,47,-2,-121,46,28,-118,1,105,0,0,0,3,0,110,0,-121,4,17,5,124,0,10,0,22,0,53,0,0,1,23,6,1,20,7,35,34,54,1,18,37,22,21,23,6,3,6,35,34,39,54,19,1,22,21,22,21,20,7,51,50,55,22,23,7,6,39,5,38,39,52,55,54,55,53,52,39,6,43,1,38,53,52,3,118,28,58,-3,-64,71,71,28,107,1,-128,-67,-2,-97,14,5,34,18,19,11,37,11,28,41,1,78,-50,12,94,17,59,81,28,3,41,40,25,-2,-8,43,16,117,71,76,53,40,24,59,47,5,49,42,-80,-4,-123,44,41,-79,2,88,1,90,-110,2,12,43,47,-2,-121,46,28,-118,1,105,-3,42,28,35,38,59,70,-81,14,16,60,25,5,10,50,5,16,81,16,32,-36,27,18,17,7,4,52,40,0,0,3,0,110,0,21,4,38,5,124,0,10,0,57,0,93,0,0,1,23,6,1,20,7,35,34,54,1,18,19,22,29,1,20,7,51,54,53,52,51,22,21,20,7,22,51,54,51,23,20,7,35,6,29,1,20,23,20,7,35,34,39,54,61,1,35,34,7,35,34,61,1,52,55,54,55,1,51,50,23,21,20,7,22,29,1,20,7,6,35,38,53,52,51,22,51,54,53,52,39,35,34,7,38,53,55,54,53,38,47,1,54,3,118,28,58,-3,-64,71,71,28,107,1,-128,-67,4,52,113,9,86,78,18,18,9,9,108,13,17,26,104,34,8,52,17,13,21,25,17,42,-108,18,17,-126,35,17,-2,4,49,-122,19,35,112,-95,28,14,55,28,22,12,-116,14,49,57,103,35,111,56,62,84,7,4,5,49,42,-80,-4,-123,44,41,-79,2,88,1,90,-3,-6,6,20,35,91,-18,9,17,-91,3,15,34,78,26,8,26,45,7,11,67,34,31,47,74,30,34,-103,64,9,44,18,8,19,-67,95,-99,2,-87,94,7,37,64,9,70,93,78,102,15,9,20,43,14,115,65,11,54,44,10,41,65,54,46,28,8,15,43,0,0,0,0,0,0,1,0,0,0,26,0,1,0,2,0,12,0,1,0,0,0,57,0,48,-1,46,0,58,0,48,-1,-124,0,0,0,0,0,16,0,-58,0,1,0,0,0,0,0,0,0,55,0,0,0,1,0,0,0,0,0,1,0,17,0,55,0,1,0,0,0,0,0,2,0,7,0,72,0,1,0,0,0,0,0,3,0,22,0,79,0,1,0,0,0,0,0,4,0,17,0,55,0,1,0,0,0,0,0,5,0,31,0,101,0,1,0,0,0,0,0,6,0,16,0,-124,0,1,0,0,0,0,0,10,0,63,0,-108,0,3,0,1,4,9,0,0,0,-114,0,-45,0,3,0,1,4,9,0,1,0,34,1,97,0,3,0,1,4,9,0,2,0,14,1,-125,0,3,0,1,4,9,0,3,0,34,1,-111,0,3,0,1,4,9,0,4,0,34,1,97,0,3,0,1,4,9,0,5,0,66,1,-77,0,3,0,1,4,9,0,6,0,32,1,-11,0,3,0,1,4,9,0,10,0,126,2,21,-88,-94,63,63,63,63,63,63,63,63,63,63,124,63,-95,-22,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,-95,-22,63,63,63,63,63,63,63,-88,-94,63,63,63,-95,-23,63,63,63,63,63,63,63,63,65,112,112,108,101,32,72,97,110,100,119,114,105,116,116,101,110,82,101,103,117,108,97,114,63,63,63,63,63,63,63,63,63,58,86,101,114,115,105,111,110,32,49,46,48,48,63,-88,-88,63,63,63,63,-88,-86,63,86,101,114,115,105,111,110,32,49,46,48,48,32,50,48,49,49,63,63,52,63,65,112,112,108,101,72,97,110,100,119,114,105,116,116,101,110,84,104,105,115,32,102,111,110,116,32,119,97,115,32,99,114,101,97,116,101,100,32,117,115,105,110,103,32,70,111,110,116,67,114,101,97,116,111,114,32,54,46,48,32,102,114,111,109,32,72,105,103,104,45,76,111,103,105,99,46,99,111,109,103,44,91,87,79,83,117,49,-126,-7,103,-100,78,-78,98,75,78,102,81,-103,91,-116,98,16,-1,12,83,5,84,43,87,-6,103,44,-126,-15,101,-121,91,87,123,38,84,-116,104,7,112,-71,-1,12,114,72,103,67,95,82,-126,-7,103,-100,98,64,103,9,-1,1,99,-120,103,67,78,42,78,-70,81,77,-115,57,79,127,117,40,-1,12,85,70,78,26,117,40,-112,20,-117,-9,-128,84,124,-5,79,92,-128,5,-125,-73,95,-105,99,-120,103,67,-1,1,-128,84,124,-5,0,81,0,81,-1,26,0,56,0,54,0,57,0,57,0,53,0,55,0,52,0,56,0,55,48,2,0,65,0,112,0,112,0,108,0,101,0,32,0,72,0,97,0,110,0,100,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,82,0,101,0,103,0,117,0,108,0,97,0,114,-126,-7,103,-100,91,87,79,83,0,58,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49,0,46,0,48,0,48,-126,-7,103,-100,91,87,79,83,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49,0,46,0,48,0,48,0,32,0,50,0,48,0,49,0,49,94,116,0,52,103,8,0,49,0,53,101,-27,-1,12,123,44,78,0,107,33,83,-47,-120,76,0,65,0,112,0,112,0,108,0,101,0,72,0,97,0,110,0,100,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,84,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,119,0,97,0,115,0,32,0,99,0,114,0,101,0,97,0,116,0,101,0,100,0,32,0,117,0,115,0,105,0,110,0,103,0,32,0,70,0,111,0,110,0,116,0,67,0,114,0,101,0,97,0,116,0,111,0,114,0,32,0,54,0,46,0,48,0,32,0,102,0,114,0,111,0,109,0,32,0,72,0,105,0,103,0,104,0,45,0,76,0,111,0,103,0,105,0,99,0,46,0,99,0,111,0,109,0,0,0,0,2,0,0,0,0,0,0,-1,39,0,-106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,91,0,92,0,93,0,94,0,95,0,96,0,97,0,-93,0,-124,0,-123,0,-67,0,-106,0,-24,0,-122,0,-114,0,-117,0,-99,0,-87,0,-92,0,-118,0,-38,0,-125,0,-109,1,2,1,3,0,-115,0,-105,0,-120,0,-61,0,-34,1,4,0,-98,0,-86,0,-11,0,-12,0,-10,7,117,110,105,48,48,66,50,7,117,110,105,48,48,66,51,7,117,110,105,48,48,66,57,0,0,0,1,-1,-1,0,2,13,10";
	// 图片的宽度。
	private int width = 127;
	// 图片的高度。
	private int height = 55;
	// 验证码字符个数
	private int codeCount = 5;
	// 验证码干扰线数
	private int lineCount = 100;
	// 验证码
	private String code = null;
	// 验证码图片Buffer
	private BufferedImage buffImg=null;
    private Color cc = new Color(178,178,178);
	private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
			'K', 'L', 'M', 'N',  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
			'X', 'Y', 'Z',  '1', '2', '3', '4', '5', '6', '7', '8', '9' };

	public  ValidateCode() {
		this.createCode();
	}
	/**
	 * @param width 图片宽
	 * @param height 图片高
	 */
	public  ValidateCode(int width,int height) {
		this.width=width;
		this.height=height;
		this.createCode();
	}
	/**
	 * @param width 图片宽
	 * @param height 图片高
	 * @param codeCount 字符个数
	 * @param lineCount 干扰线条数
	 */
	public  ValidateCode(int width,int height,int codeCount,int lineCount) {
		this.width=width;
		this.height=height;
		this.codeCount=codeCount;
		this.lineCount=lineCount;
		this.createCode();
	}
	
	/**
	 * 创建验证码
	 */
	public void createCode() {
		int x = 0,fontHeight=0,codeY=0;
		int red = 0, green = 0, blue = 0;
		
		x = width / (codeCount +3);//每个字符的宽度
		fontHeight = height-25;//字体的高度
		codeY = height - height / 3;
		
		// 图像buffer
		buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
		Graphics2D g = buffImg.createGraphics();
		// 生成随机数
		Random random = new Random();
		// 将图像填充为白色
	    
		g.setColor(cc);
		g.fillRect(0, 0, width, height);
		// 创建字体
		Font font =getFont(fontHeight);
		g.setFont(font);
		
		for (int i = 0; i < lineCount; i++) {
			int xs = random.nextInt(width);
			int ys = random.nextInt(height);
			int xe = xs+random.nextInt(width/8);
			int ye = ys+random.nextInt(height/8);
			red = random.nextInt(255);
			green = random.nextInt(255);
			blue = random.nextInt(255);
			//g.setColor(Color.WHITE);
			//g.drawLine(xs, ys, xe, ye);
		}
		
		// randomCode记录随机产生的验证码
		StringBuffer randomCode = new StringBuffer();
		// 随机产生codeCount个字符的验证码。
		int startX=(width-(codeCount*x))/2;
		for (int i = 0; i < codeCount; i++) {
			String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
			// 产生随机的颜色值，让输出的每个字符的颜色值都将不同。
			//red = random.nextInt(100);
			//green = random.nextInt(100);
			//blue = random.nextInt(100);
			g.setColor(Color.WHITE);
			int codeX=i==0?startX:(i * x + startX);
			g.drawString(strRand, codeX , codeY);
			// 将产生的四个随机数组合在一起。
			randomCode.append(strRand);
		}
		// 将四位数字的验证码保存到Session中。
		code=randomCode.toString();
	}
	
	/**
	 * 字体
	 * @param fontHeight 字体高度
	 * @return
	 */
	public Font getFont(int fontHeight){
		String [] str=ValidateCode.STRING_BYTE.split(",");
		byte [] buf=new byte[str.length];
		Font font=null;
		try {
			for (int i = 0; i < str.length; i++) {
				buf[i]=(byte)Integer.parseInt(str[i]);
			}
			Font baseFont = Font.createFont(0, new ByteArrayInputStream(buf));
			font = baseFont.deriveFont(Font.PLAIN, fontHeight);
			//font = new Font("DialogInput",Font.PLAIN, fontHeight);
		} catch (Exception e) {
			font = new Font("DialogInput",Font.PLAIN, fontHeight);
		}
		return font;
	}
	
	
	public void write(String path) throws IOException {
		OutputStream sos = new FileOutputStream(path);
			this.write(sos);
	}
	
	public void write(OutputStream sos) throws IOException {
			ImageIO.write(buffImg, "png", sos);
			sos.close();
	}
	public BufferedImage getBuffImg() {
		return buffImg;
	}
	
	public String getCode() {
		return code;
	}
}
